iT邦幫忙

2024 iThome 鐵人賽

DAY 2
0

JavaScript Drum Kit

今天是一個簡單的鍵盤監聽事件,當按到對應的鍵盤時,會有css的變化,和聲音播放.
原本影片是放入爵士鼓的聲音,但我個人後來有發現有趣的Web Audio API,就自己做了變化XD,並研究了一下基本的操作.

附上最終成品圖
以及個人codepen

https://ithelp.ithome.com.tw/upload/images/20240911/20169174FqVxIFGokt.png

技巧點

1. addEventListener() 綁定監聽、removeEventListener() 移除監聽

  • 有監聽事件,記得也要有移除監聽的事件,不然監聽事件會一直存在,可能造成效能上的過度消耗.
  • 監聽的事件非常多樣,不知道有什麼事件可以監聽的話,我都直接看w3c school,都整理好了,還有說明,可惜是英文的(誤)
window.addEventListener(要監聽的事件行為, 放入你的函式);
// 監聽的事件行為有很多,常見的有click、submit、scroll等等...

window.addEventListener("keyup", function(e) {
    console.log(e)
});
window.removeEventListener("keyup", function(e) {
    console.log(e)
});

當你觸發鍵盤事件時,就可以得到這個事件的很多參數:
其中的type: 'keyup' 就是觸發的事件, key: 'f'則是我按下的鍵盤對應的英文字
https://ithelp.ithome.com.tw/upload/images/20240911/201691742dIueVgxiE.png

2. 事件keydown、keypress、keyup

  • 三種事件使用上有一些差異,如下:
事件 說明 觸發順序 連續按著不放 備註
keydown 當下壓按鍵時,馬上觸發事件 1 一直觸發
keyup 當下壓按鍵,按鍵向上回彈後,觸發事件 3 只在按鍵按壓且回彈後觸發一次
keypress 當下壓按鍵時,馬上觸發事件 2 一直觸發 棄用,不推薦使用

3. data-?自定義的屬性名稱

  • ?號為你可以自己隨便命名的英文(只能小寫英文!)(不能使用xml當開頭!)(不能包含任何分號!),舉例: <div class="home" data-test="hello"></div>
    上面的test則是我自己命名的屬性名稱!
  • 示範如何取出data-test的值
<div class="home" data-test="hello"></div>
const home = document.querySelector(".home");
home.dataset.test; // 預期可以拿到hello
  • 總結:取值起手式 dataset.你命名的名稱 (不要遺忘那個小點點.)
    可以預先將你想要的東西埋入在html tag中,當觸發事件時,拿出來判斷使用.

4. classList 取得指定元素的class名稱

<div class="test">測試用元素</div>
const test = document.querySelector(".test");
方法 解說 示範
add("*") *為你要增加的class名稱, 也可以一次增加多個class名稱 test.classList.add("good"); 或 test.classList.add("good", "bad");
remove("*") *為你要移除的class名稱,也可以一次移除多個class名稱 test.classList.remove("good"); 或 test.classList.remove("good", "bad");
toggle("*") *為你要加入或者移除的class名稱,像是電燈的開關一樣,若原本沒有class名稱的話就增加上去;相反地,原本已經有此class名稱的話,就移除掉. test.classList.toggle("test"); // 預期結果會移除掉test,因為原本已經有此class名稱了
contains("*") *為你要判斷是否有此class的名稱,有此名稱則會回傳true,反之false test.classList.contains("test") // true
replace("*","?") 前面*的位置放入你要拿掉的class名稱,後面?的位置則是要加入的class名稱 test.classList.replace("test", "good"); //class名稱將會剩下只有good

5. Web Audio API

這部分使用上滿複雜的,也是參考其他人的文章去簡單認識,有興趣了解原理過程的可以點我

心得

是一個不用太費時可以完成的小練習,也從中再次認識網頁中的事件有哪些可以拿來監聽.想了解更深入的部分就可以去翻找文件,或是找前人分享的文章,說不定有一些意外的小收穫哦~^^


上一篇
緣起_JavaScript 練功之路永無盡頭系列
下一篇
CSS + JS 時鐘
系列文
鱷魚帶我練習JavaScript之個人練功坊17
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言